#ifndef CONSTANTS_H
#define CONSTANTS_H

#include "Base.h"

enum Axis { X, Y, Z };

enum Colors { RED = 1, BLUE = 2, GREEN = 3, YELLOW = 4, PURPLE = 5, CYAN = 6 };

enum Orientation { POSITIVE = 1, NEGATIVE = -1 };

enum Operation {ROTATE = 1, MOVE = 2, FALL = 3, NOP = 4};

enum PieceNumber { PIECE_L = 1, PIECE_S = 2, PIECE_T = 3, PIECE_I = 4, PIECE_E = 5, PIECE_O = 6};

const Point3f POSITIONS_L[4] = { Point3f(0.0, 0.0, 0.0), Point3f(1.0, 0.0, 0.0), Point3f(0.0, 1.0, 0.0), Point3f(0.0, 2.0, 0.0) };
const Point3f POSITIONS_S[4] = { Point3f(-1.0, 0.0, 0.0), Point3f(0.0, 0.0, 0.0), Point3f(0.0, 1.0, 0.0), Point3f(1.0, 1.0, 0.0) };
const Point3f POSITIONS_T[4] = { Point3f(-1.0, 0.0, 0.0), Point3f(0.0, 0.0, 0.0), Point3f(1.0, 0.0, 0.0), Point3f(0.0, 1.0, 0.0) };
const Point3f POSITIONS_I[4] = { Point3f(0.0, 0.0, 0.0), Point3f(0.0, 1.0, 0.0), Point3f(0.0, 2.0, 0.0), Point3f(0.0, -1.0, 0.0) };
const Point3f POSITIONS_E[4] = { Point3f(1.0, 0.0, 0.0), Point3f(0.0, 0.0, 0.0), Point3f(0.0, 0.0, -1.0), Point3f(0.0, 1.0, 0.0) };
const Point3f POSITIONS_O[8] = { Point3f(1.0, 0.0, 0.0), Point3f(0.0, 0.0, 0.0), Point3f(0.0, 1.0, 0.0), Point3f(1.0, 1.0, 0.0),
	 							Point3f(1.0, 0.0, -1.0), Point3f(0.0, 0.0, -1.0), Point3f(0.0, 1.0, -1.0), Point3f(1.0, 1.0, -1.0) };

typedef struct {
    Axis a;
    Orientation o;
    Operation op;
} command;

#endif